Merge pull request #37 from itkevin/master

Make relative url's in website agent absolute

Andrew Cantino 12 years ago
parent
commit
b9f8711611
2 changed files with 24 additions and 1 deletions
  1. 3 0
      app/models/agents/website_agent.rb
  2. 21 1
      spec/models/agents/website_agent_spec.rb

+ 3 - 0
app/models/agents/website_agent.rb

@@ -99,6 +99,9 @@ module Agents
99 99
           result = {}
100 100
           options[:extract].keys.each do |name|
101 101
             result[name] = output[name][index]
102
+            if name.to_s == 'url'
103
+              result[name] = URI.join(options[:url], result[name]).to_s if (result[name] =~ URI::DEFAULT_PARSER.regexp[:ABS_URI]).nil?
104
+            end
102 105
           end
103 106
 
104 107
           if !options[:mode] || options[:mode].to_s == "all" || (options[:mode].to_s == "on_change" && !previous_payloads.include?(result.to_json))

+ 21 - 1
spec/models/agents/website_agent_spec.rb

@@ -51,6 +51,26 @@ describe Agents::WebsiteAgent do
51 51
       event.payload[:title].should =~ /^Biologists play reverse/
52 52
     end
53 53
 
54
+    it "should turn relative urls to absolute" do
55
+      rel_site = {
56
+        :name => "XKCD",
57
+        :expected_update_period_in_days => 2,
58
+        :type => "html",
59
+        :url => "http://xkcd.com",
60
+        :mode => :on_change,
61
+        :extract => {
62
+            :url => {:css => "#topLeft a", :attr => "href"},
63
+            :title => {:css => "#topLeft a", :text => "true"}
64
+        }
65
+      }
66
+      rel = Agents::WebsiteAgent.new(:name => "xkcd", :options => rel_site)
67
+      rel.user = users(:bob)
68
+      rel.save!
69
+      rel.check
70
+      event = Event.last
71
+      event.payload[:url].should == "http://xkcd.com/about"
72
+    end
73
+        
54 74
     describe "JSON" do
55 75
       it "works with paths" do
56 76
         json = {
@@ -120,4 +140,4 @@ describe Agents::WebsiteAgent do
120 140
       end
121 141
     end
122 142
   end
123
-end
143
+end